引入腾讯人脸识别动态库,编译报错duplicate symbol
:
经过排查,去掉项目other link flag 中的 -all_load
后不报错了。
-ObjC
链接器会加载静态库中所有的Objective-C类和Category (Passing the-ObjC
option to the linker causes it to load all members of static libraries that implement any Objective-C class or category)-all_load
: 会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!当两个静态库存在同样的符号时,就会产生ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。-force_load
: 加载指定静态库的全部类,与-all_load
类似但是只限定于特定静态库,所以-force_load需要指定静态库。
参考:
- ios - -all_load other linker flag causing duplicate symbol errors in 3rd party framework - Stack Overflow
- objective c - xcode project-/target-settings-syntax for linker flag force_load on iPhone - Stack Overflow
- iOS 解决一个因三方静态库冲突产生的duplicate symbol的问题 - Rayshen - 博客园
- https://developer.apple.com/library/archive/qa/qa1490/_index.html